package org.pub.app.lunch;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MyAlertDialog extends Activity implements View.OnClickListener {

	// onCreateDialog 내부 case 문에서 사용
	static final int ALERT_DIALOG_TEST00 = 0;
	static final int ALERT_DIALOG_TEST01 = 1;

	Button btnAlert00;
	Button btnAlert01;

	String items[] = { "item 1", "item 2" };

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.alertdialog);
		System.out.println("create");
		btnAlert00 = (Button) findViewById(R.id.btnAlert00);
		btnAlert01 = (Button) findViewById(R.id.btnAlert01);

		btnAlert00.setOnClickListener(this);
		btnAlert01.setOnClickListener(this);
	}

	// main activity의 버튼을 위한 callback
	// View.OnClickListener객체의 abstract 메소드의 구현
	public void onClick(View view) {
		if (view == btnAlert00) {
			// onCreateDialog(int), onPrepareDialog(int) 호출
			showDialog(ALERT_DIALOG_TEST00);
		} else {
			showDialog(ALERT_DIALOG_TEST01);
		}
	}

	// MyAlertDialog:showDialog(int)의 callback
	// AlertDialog 객체의 생성 시 한번만 호출됨
	@Override
	protected Dialog onCreateDialog(int id) {
		super.onCreateDialog(id);

		AlertDialog dlg;
		System.out.println(id);
		switch (id) {
		case ALERT_DIALOG_TEST00:

			// AlertDialog.Builder객체와 메소드체인을 통한 직관적 객체 생성
			dlg = new AlertDialog.Builder(this).setIcon(R.drawable.icon) // icon 지정 후 Builder 객체 리턴
					.setTitle("타이틀 영역") // title 지정
					.setMessage("메시지 영역") // 메시지 text 지정
					.setView(createCustomView()) // 커스텀 뷰 지정
					// AlertDialog의 버튼 생성 & 버튼 클릭 이밴트에 대한 Listener 객체 생성/등록
					.setPositiveButton("버튼 영역", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							dialog.dismiss();
						}
					}).create(); // 결과로 AlertView return (dlg에 return결과 대입)
			break;
		case ALERT_DIALOG_TEST01:
			dlg = new AlertDialog.Builder(this).setIcon(R.drawable.icon).setTitle("타이틀 영역")
			// .setMessage("메시지 영역") // setItems...류의 메소드와 같이 사용 불가
					.setView(createCustomView()).setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface i, int position) {
							String strNumber;
							if (position == 0) {
								strNumber = "1번 아이템 Checked";
							} else {
								strNumber = "2번 아이템 Checked";
							}
							Toast.makeText(MyAlertDialog.this, strNumber, Toast.LENGTH_SHORT).show();
						}
					}).setPositiveButton("버튼 영역", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							dialog.dismiss();
						}
					}).create();
			break;
		default:
			dlg = null;
		}

		return dlg;
	}

	// 처음 생성된 AlertDialog 객체이건 재사용되는 AlerDialog 객체이건
	// AlertDialog객체가 화면에 표시 될때 마다 항상 호출 됨
	@Override
	public void onPrepareDialog(int id, Dialog dlg) {
		super.onPrepareDialog(id, dlg);
		// 화면에 보여지기 전에 설정할 내용 여기에...
	}

	// AlertDialog에 사용할 ListView로 구성된 커스텀 view 생성
	private View createCustomView() {
		LinearLayout linearLayoutView = new LinearLayout(this);

		ListView listview = new ListView(this);
		ArrayAdapter<String> aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);

		listview.setAdapter(aa);
		listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
				String strNumber;
				if (position == 0) {
					strNumber = "_1번 아이템 Clicked";
				} else {
					strNumber = "_2번 아이템 Clicked";
				}
				Toast.makeText(MyAlertDialog.this, strNumber, Toast.LENGTH_SHORT).show();
			}
		});

		TextView tv = new TextView(this);
		tv.setText("  Custom View 영역");

		linearLayoutView.setOrientation(LinearLayout.VERTICAL);
		linearLayoutView.addView(tv);
		linearLayoutView.addView(listview);

		return linearLayoutView;
	}
}
